// 测试运算符

// 1、一元运算符(unary operator)
//    递增(++) 、递减(--)、正号(+) 、负号(-)
let x = 100;
console.log( x++ );
console.log( x );

let y = 100;
console.log( ++y );

let z = -y;
console.log( z );

// 2、位运算符
//    按位或(|) 、按位与(&)、按位异或(^)、按位取反(~)
let a = 5; // 0000_0000_0000_0000_0000_0000_0000_0101
let b = 7; // 0000_0000_0000_0000_0000_0000_0000_0111

console.log( a | b ); // 0000_0000_0000_0000_0000_0000_0000_0111
console.log( a & b ); // 0000_0000_0000_0000_0000_0000_0000_0101
console.log( a ^ b ); // 0000_0000_0000_0000_0000_0000_0000_0010
// 按位取反(~) 是个一元运算符(unary operator)
console.log( ~a ); // 1111_1111_1111_1111_1111_1111_1111_1010
console.log( a << 2 );
console.log( a >>> 1 );

// 3、布尔操作符(逻辑操作符)
//    逻辑或(||) 、逻辑与(&&) 、逻辑取反(!)
let first = true;
let second = true;
let third = false;
let fourth = false;
console.log( first || second ); // true
console.log( first || third ); // true
console.log( third || fourth ); // false
console.log( first && second ); // true
console.log( first && third ); // false
console.log( !first ); // false
console.log( !third ); // true

// 4、乘性运算符
//    乘法(*) 、除法(/) 、求模(%)
let m = 10;
let n = 3;
console.log( m * n ); // 30
console.log( m / n ); // 3.333...
console.log( m % n ); // 1

// 5、指数操作符 (**)
console.log( Math.pow( 5, 2 ) );
console.log( 5 ** 2 );

console.log( Math.pow( 81, 0.5 ) );
console.log( 81 ** 0.5 );

// 6、加性运算符
//    加法(+) 、减法(-)
console.log( 250 + 250 );
console.log( 250 - 250 );

// 7、关系操作符
let s = 100;
let t = 100;
let p = '100';
//    大于(>)、大于等于(>=)
console.log( s > t , s >= t ); // false true
//    小于(<)、小于等于(<=)
console.log( s < t , s <= t ); // false true

// 8、相等运算符
//    等于(==)、不等于(!=)
//    全等(===)、不全等(!==)
console.log( s == t ); // true
console.log( s == p ); // true
// 全等(===) 表示 类型 和 值 都相同时才返回 true
console.log( s === t ); // true
console.log( s === p ); // false
// 不全等(===) 表示 类型 或 值 只要有一个不相同就返回 true
console.log( s !== p ); // true

// 9、条件运算符(也称作三元运算符或三目运算符)
//    condition_expression ? true_value : false_value 
let one = 100;
let two = 200;
console.log( one > two ? `${one}大于${two}` : `${one}不大于${two}`);
let res = one > two ? '大于' : '不大于';
console.log(`${one}${res}${two}`);

// 10、赋值运算符
//     简单赋值(=)
let f = 1024;
//     复合赋值(+=、*=、/=、-=、%=、**=、|=、&=、^=、>>=、<<=、>>>=)
f **= 0.5; // f = f ** 0.5;
console.log( f );

// 11、逗号运算符
let username = 'sanfeng', nickname = '三丰';
console.log(username, nickname);

let count = (10, 100, 250, 67, 9);
console.log( count );
